#ifndef INTERBOURSIER_
#define INTERBOURSIER_
/**
 * S'occupe entièrement du réseau interboursier.
 * @author: Christopher Rabotin
 */
#include "casual_includes.h"
#include "../libbourse/alea.h"
#include "../libcomm/logger.h"
#include "../libcomm/message.h"
#include "../libcomm/communication.h"

/** nombre maximal de bourse pouvant être dans la table de routage */
#define NB_BOURSES 25
/**
 * id2port est la table de routage du serveur interboursier. 
 * Elle est limitée à la taille définie par le define NB_BOURSES
 */
typedef struct id2port_struct {
	/** tableau d'identifiant de la bourse */
	int id_bourse[NB_BOURSES];
	/** tableau des ports des serveurs d'acquisition*/
	int port_bourse[NB_BOURSES];
} id2port;

/**
 * Permet de démarrer un serveur interboursier
 * @param mdl module lié au serveur interboursier
 * @param port port sur lequel le serveur se bind
 * @param nb_serv nombre de serveur d'acquision (temporaire)
 * 
 * <br><b>Exemple d'utilisation:</b>
 * <pre>module *inter=init_module("Interboursier", interb, 1200);
 launch_interboursier(inter, 1200, 2);</pre>
 */
void launch_interboursier(module* mdl, const int port, const int nb_serv);

/**
 * Permet de récupérer le port du serveur d'acquisition à partir de l'identifiant d'une bourse
 * @param tbl la table de routage
 * @param id l'identifiant de la bourse à atteindre
 * @return '-1' si le serveur n'a pas été trouvé, sinon le port du serveur d'acquisition
 */
int route(id2port* tbl, int id);
/**
 * Permet d'ajouter un serveur à la table de routage. Cette fonction fait appel à route()
 * pour savoir si la bourse est déjà dans la table. Si oui, alors on n'ajoute pas le nouveau
 * serveur à la table de routage.
 * @param tbl la table de routage
 * @param id l'identifiant de la bourse correspondante
 * @param port le port du serveur d'acquisition de cette bourse.
 * @return 0 s'il n'y a plus de place dans la table de routage, 1 sinon.
 */
int add_route(id2port* tbl, int id, int port);
#endif /*INTERBOURSIER_*/
